﻿/*
SINACOR - BMF&Bovespa
Arquivo: Bloqueio.cs
Criado em: 08-jun-2010 17:14:31
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;


namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessLogic 
{
	public class Bloqueio : BaseBusinessLogic
    {
        #region Campos

        private ResourceAccess.Bloqueio raBloqueio;

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public Bloqueio()
        {
            this.raBloqueio = new Sinacor.Servico.Bovespa.ManutencaoOrdens.ResourceAccess.Bloqueio();
        }

        #endregion

        #region Métodos
        /// <summary>
		/// Altera informações de um bloqueio
		/// </summary>
		/// <param name="entity"></param>
		public void AlterarBloqueio(BusinessEntity.Bloqueio entity)
		{
            BusinessRulesValidation.ParametroInformado<BusinessEntity.Bloqueio> validacaoParametroInformado = null;
            BusinessRulesValidation.BloqueioExistente validacaoBloqueioExistente = null;
            BusinessRulesValidation.BloqueioValido validacaoBloqueioValido = null;
            BusinessRulesValidator validador = new BusinessRulesValidator();


            //Montagem das BusinessRulesValidation
            validacaoParametroInformado = new BusinessRulesValidation.ParametroInformado<BusinessEntity.Bloqueio>();
            validacaoParametroInformado.Parametro = entity;
            
            validacaoBloqueioExistente = new BusinessRulesValidation.BloqueioExistente();
            validacaoBloqueioExistente.EntityToValidate = entity;

            validacaoBloqueioValido = new BusinessRulesValidation.BloqueioValido();
            validacaoBloqueioValido.EntityToValidate = entity;

            //Validações das BusinessRulesValidation
            validador.AddValidation("ParametroInformado", validacaoParametroInformado);
            validador.Validate();

            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("BloqueioExistente", validacaoBloqueioExistente);
            validador.AddValidation("BloqueioValido", validacaoBloqueioValido);
            validador.Validate();

            //Alteração de bloqueios
            this.raBloqueio.AlterarBloqueio(entity);
		}

		/// <summary>
		/// Consulta uma lista de bloqueios conforme filtro de pesquisa
		/// </summary>
		/// <param name="entity"></param>
        public List<BusinessEntity.Bloqueio> ConsultarBloqueios(BusinessEntity.Parameter.FiltroBloqueio entity)
		{
            //Consulta bloqueios
            return this.raBloqueio.ConsultarBloqueios(entity);
		}

		/// <summary>
		/// Excluir um bloqueio
		/// </summary>
		/// <param name="entity"></param>
		public void ExcluirBloqueio(BusinessEntity.Parameter.FiltroBloqueioChave entity)
		{
            BusinessRulesValidation.ParametroInformado<BusinessEntity.Parameter.FiltroBloqueioChave> validacaoParametroInformado = null;
            BusinessRulesValidation.BloqueioExistente validacaoBloqueioExistente = null;
            BusinessRulesValidator validador = new BusinessRulesValidator();

            //Validação de Parametro Informado
            validacaoParametroInformado = new BusinessRulesValidation.ParametroInformado<BusinessEntity.Parameter.FiltroBloqueioChave>();
            validacaoParametroInformado.Parametro = entity;

            validador.AddValidation("ParametroInformado", validacaoParametroInformado);
            validador.Validate();

            //Limpar validação
            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            //Validação de Bloqueio Existente
            validacaoBloqueioExistente = new BusinessRulesValidation.BloqueioExistente();
            validacaoBloqueioExistente.EntityToValidate = new BusinessEntity.Bloqueio { Codigo = entity.Codigo };

            validador.AddValidation("BloqueioExistente", validacaoBloqueioExistente);
            validador.Validate();

			//Consulta bloqueios
            this.raBloqueio.ExcluirBloqueio(entity);
		}

		/// <summary>
		/// Inclui um novo bloqueio
		/// </summary>
		/// <param name="entity"></param>
		public void IncluirBloqueio(BusinessEntity.Bloqueio entity)
		{
            BusinessRulesValidation.ParametroInformado<BusinessEntity.Bloqueio> validacaoParametroInformado = null;
            BusinessRulesValidation.BloqueioValido validacaoBloqueioValido = null;
            BusinessRulesValidator validador = new BusinessRulesValidator();


            //Montagem das BusinessRulesValidation
            validacaoParametroInformado = new BusinessRulesValidation.ParametroInformado<BusinessEntity.Bloqueio>();
            validacaoParametroInformado.Parametro = entity;

            validacaoBloqueioValido = new BusinessRulesValidation.BloqueioValido();
            validacaoBloqueioValido.EntityToValidate = entity;

            //Validações das BusinessRulesValidation
            validador.AddValidation("ParametroInformado", validacaoParametroInformado);
            validador.Validate();

            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("BloqueioValido", validacaoBloqueioValido);
            validador.Validate();
            

			//Inclui bloqueio
            this.raBloqueio.IncluirBloqueio(entity);

		}

		/// <summary>
		/// Obtem um bloqueio conforme o filtro chave
		/// </summary>
		/// <param name="entity"></param>
		public BusinessEntity.Bloqueio ObterBloqueio(BusinessEntity.Parameter.FiltroBloqueioChave entity)
		{
            BusinessEntity.Parameter.FiltroBloqueio filtro = null;
            List<BusinessEntity.Bloqueio> listaBloqueios = null;
            BusinessRulesValidation.ParametroInformado<BusinessEntity.Parameter.FiltroBloqueioChave> validacaoParametroInformado = null;
            BusinessRulesValidation.FiltroBloqueioValido validacaoFiltroBloqueioValido = null;
            BusinessRulesValidator validador = new BusinessRulesValidator();

            //Validação de Parametro Informado
            validacaoParametroInformado = new BusinessRulesValidation.ParametroInformado<BusinessEntity.Parameter.FiltroBloqueioChave>();
            validacaoParametroInformado.Parametro = entity;

            validador.AddValidation("ParametroInformado", validacaoParametroInformado);
            validador.Validate();

            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            //Validação de Filtro Bloqueio Valido
            validacaoFiltroBloqueioValido = new BusinessRulesValidation.FiltroBloqueioValido();
            validacaoFiltroBloqueioValido.EntityToValidate = entity;

            validador.AddValidation("FiltroBloqueioValido", validacaoFiltroBloqueioValido);
            validador.Validate();

            //Monsta filtro
            filtro = new Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessEntity.Parameter.FiltroBloqueio
            {
                Codigo = entity.Codigo
            };

            //Consulta bloqueios
            listaBloqueios = this.raBloqueio.ConsultarBloqueios(filtro);

            //Monta retorno
            if (listaBloqueios != null && listaBloqueios.Count > 0)
                return listaBloqueios[0];
            else
                return null;
		}
		#endregion
	}

}